home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright 1993, 1994, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
- * the contents of this file may not be disclosed to third parties, copied or
- * duplicated in any form, in whole or in part, without the prior written
- * permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to restrictions
- * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
- * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
- * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
- * rights reserved under the Copyright Laws of the United States.
- */
-
-
- #include <aux.h>
- #include <auxPrivate.h>
-
-
- /**************************************************************************
- * auxMouseFunc() - set mouse callback functions
- **************************************************************************/
-
- GLvoid
- auxMouseFunc( GLint mouseButton, GLint direction,
- GLvoid (*_mouseFunc)( AUX_EVENTREC * ) )
- {
- MouseFunc *new;
-
- new = (MouseFunc *) malloc( sizeof( MouseFunc ) );
-
- new->func = _mouseFunc;
- new->prev = (MouseFunc *) NULL;
- new->next = (MouseFunc *) NULL;
-
- if ( mouseButton == AUX_MOUSELOC ) {
- if ( !mouseLoc )
- mouseLoc = new;
- else {
- new->next = mouseLoc;
- mouseLoc->prev = new;
- mouseLoc = new;
- }
- } else {
- if ( direction == AUX_MOUSEDOWN ) {
- if ( !mouseDown[mouseButton - AUX_BUTTON_MASK] )
- mouseDown[mouseButton - AUX_BUTTON_MASK] = new;
- else {
- new->next = mouseDown[mouseButton - AUX_BUTTON_MASK];
- mouseDown[mouseButton - AUX_BUTTON_MASK]->prev = new;
- mouseDown[mouseButton - AUX_BUTTON_MASK] = new;
- }
- } else {
- if ( !mouseUp[mouseButton - AUX_BUTTON_MASK] )
- mouseUp[mouseButton - AUX_BUTTON_MASK] = new;
- else {
- new->next = mouseUp[mouseButton - AUX_BUTTON_MASK];
- mouseUp[mouseButton - AUX_BUTTON_MASK]->prev = new;
- mouseUp[mouseButton - AUX_BUTTON_MASK] = new;
- }
- }
- }
- }
-
-
- /**************************************************************************
- * auxDeleteMouseFunc() - remove mouse callback functions
- **************************************************************************/
-
- static GLvoid
- DeleteMouseFunction( MouseFunc **list, GLvoid (*_mouseFunc)( AUX_EVENTREC * ) )
- {
- MouseFunc *tmp;
-
- if ( !list )
- return;
-
- for ( tmp = *list; tmp; tmp = tmp->next )
- if ( tmp->func == _mouseFunc )
- if ( !tmp->prev && !tmp->next ) /* Only element in list */
- *list = (MouseFunc *) NULL;
- else if ( !tmp->prev ) { /* Front of list */
- *list = tmp->next;
- (*list)->prev = (MouseFunc *) NULL;
- } else if ( !tmp->next ) /* End of list */
- tmp->prev->next = (MouseFunc *) NULL;
- else {
- tmp->prev->next = tmp->next;
- tmp->next->prev = tmp->prev;
- }
- free( tmp );
- }
-
- GLvoid
- auxDeleteMouseFunc( GLint mouseButton, GLint direction,
- GLvoid (*_mouseFunc)( AUX_EVENTREC * ) )
- {
- if ( mouseButton == AUX_MOUSELOC ) {
- DeleteMouseFunction( &mouseLoc, _mouseFunc );
- } else {
- if ( direction == AUX_MOUSEDOWN )
- DeleteMouseFunction( &mouseDown[mouseButton - AUX_BUTTON_MASK],
- _mouseFunc );
- else
- DeleteMouseFunction( &mouseUp[mouseButton - AUX_BUTTON_MASK],
- _mouseFunc );
- }
- }
-
-
- /**************************************************************************
- * auxDeleteAllMouseFunc() - remove mouse callback functions
- **************************************************************************/
-
- GLvoid
- auxDeleteAllMouseFunc( GLint mouseButton, GLint direction )
- {
- MouseFunc *tmp;
-
- if ( mouseButton == AUX_MOUSELOC ) {
- tmp = mouseLoc;
- mouseLoc = (MouseFunc *) NULL;
- } else {
- if ( direction == AUX_MOUSEDOWN ) {
- tmp = mouseDown[mouseButton - AUX_BUTTON_MASK];
- mouseDown[mouseButton - AUX_BUTTON_MASK] = (MouseFunc *) NULL;
- } else {
- tmp = mouseUp[mouseButton - AUX_BUTTON_MASK];
- mouseUp[mouseButton - AUX_BUTTON_MASK] = (MouseFunc *) NULL;
- }
- }
-
- if ( !tmp->prev && !tmp->next ) /* Only element in function list */
- free( tmp );
- else {
- MouseFunc *next;
- while ( tmp ) {
- next = tmp->next;
- free( tmp );
- tmp = next;
- }
- }
- }
-